
package business;

import dao.ClienteDAO;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import vo.ClienteVO;

public class Cliente {
    
    public static List<ClienteVO> getClientes() {
        return ClienteDAO.getClientes();
    }
    
    public static List<ClienteVO> getClientePeloCPF(String cpf) {
        return ClienteDAO.getClientePeloCPF(cpf);
    }

    public static void insertCliente(String cpf, String rg, String nome, String dataNascimento, String cep, String endereco, String numero, String complemento, String numeroCNH, String validadeCNH) {
        
        SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");  
        
        Date dataNascimento_nova = null;
        try {
            dataNascimento_nova = new Date(format.parse(dataNascimento).getTime());
        } catch (ParseException ex) {
            Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        int numero_novo = Integer.parseInt(numero);
        
        Date validadeCNH_nova = null;
        try {
            validadeCNH_nova = new Date(format.parse(validadeCNH).getTime());
        } catch (ParseException ex) {
            Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        ClienteVO cliente = new ClienteVO(cpf, rg, nome, dataNascimento_nova, cep, endereco, numero_novo, complemento, numeroCNH, validadeCNH_nova);
        
        ClienteDAO.insertCliente(cliente);
    }
    
    public static boolean ClienteExiste(String cpf){
        return ClienteDAO.ClienteExiste(cpf);
    }
    
    public static void alterarCliente(String cpf, String rg, String nome, String dataNascimento, String cep, String endereco, String numero, String complemento,String Num_CNH,String Validade_CNH){
        ClienteDAO.alterarCliente(cpf, rg,nome,dataNascimento,cep,endereco,numero,complemento,Num_CNH,Validade_CNH);
    }
    
    public static void deleteClientePeloCPF(String cpf){
        ClienteDAO.deleteClientePeloCPF(cpf);
    }
       public static boolean validaCPF(String stringCPF)
  {
      int i, soma1, soma2, digito1, digito2;

      if(stringCPF.length() != 11)
        return false;

      if( (stringCPF.equals("00000000000")) || (stringCPF.equals("11111111111")) ||
          (stringCPF.equals("22222222222")) || (stringCPF.equals("33333333333")) ||
          (stringCPF.equals("44444444444")) || (stringCPF.equals("55555555555")) ||
          (stringCPF.equals("66666666666")) || (stringCPF.equals("77777777777")) ||
          (stringCPF.equals("88888888888")) || (stringCPF.equals("99999999999")))
        return false;

      //Calcula o primeiro dígito
      soma1 = 0;
      for(i=0; i<=8; i++)
        soma1 = soma1 + Integer.parseInt(stringCPF.substring(i, i+1)) * (10 - i);

      if(soma1 % 11 < 2)
          digito1 = 0;
      else
          digito1 = 11 - (soma1 % 11);

      //Calcula o segundo dígito
      soma2 = 0;
      for(i=0; i<=9; i++) 
          soma2 = soma2 + Integer.parseInt(stringCPF.substring(i, i+1)) * (11 - i);

      if(soma2 % 11 < 2)
        digito2 = 0;
      else
        digito2 = 11 - (soma2 % 11);

      if( (digito1 == Integer.parseInt(stringCPF.substring(9, 10))) && (digito2 == Integer.parseInt(stringCPF.substring(10))) )
          return true;

      return false;

  }
       
 public static boolean isDate(String Data)  
   
        {  
                  int Dia=Reserva.GeraDias(Data);
                  int Ano=Reserva.GeraAno(Data);
                  int Mes=Reserva.GeraMes(Data);
                  
                  
                  
                  if((Dia<=0||Dia>=31)||(Mes<=0||Mes>12) || (Ano<=1900))//melhorar esse algoritmo
                  {   //System.out.println("isdate"+Data);
                      return false;}
                  else
                      return true;
  
                                 
        } 
 public static boolean MaiorDeIdade(String Data)  
 {    Calendar Agora= Calendar.getInstance();       
      int Dia=Reserva.GeraDias(Data);
      int Ano=Reserva.GeraAno(Data);
      int Mes=Reserva.GeraMes(Data);
      
      int Dia_Atual=Agora.get(Calendar.DAY_OF_MONTH);
      int Mes_Atual=Agora.get(Calendar.MONTH)+1;
      int Ano_Atual=Agora.get(Calendar.YEAR);
      
      
      if(((Ano_Atual-Ano ==18 )&&(Mes==Mes_Atual && Dia>=Dia_Atual)) || (Ano_Atual-Ano>18)|| ((Ano_Atual-Ano ==18 )&&(Mes>Mes_Atual)))
          return true;
      else
          return false;
                         
 }  
 public static boolean CNHValidade(String Data)
 {   Calendar Agora= Calendar.getInstance();       
      int Dia=Reserva.GeraDias(Data);
      int Ano=Reserva.GeraAno(Data);
      int Mes=Reserva.GeraMes(Data);
      
      int Dia_Atual=Agora.get(Calendar.DAY_OF_MONTH);
      int Mes_Atual=Agora.get(Calendar.MONTH)+1;
      int Ano_Atual=Agora.get(Calendar.YEAR);
      
      
      if(isDate(Data)&&((Ano>Ano_Atual)||(Ano==Ano_Atual && Mes>Mes_Atual)||(Ano==Ano_Atual && Mes==Mes_Atual && Dia>Dia_Atual)))
          return true;
      else
          return false;
     
 }

}
